package pri.hillchen.springbootstd.bms.common.util;

import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DbType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.springframework.util.StringUtils;

import java.util.ResourceBundle;

/**
 * 代码生成 注意：不生成service接口 注意：不生成service接口 注意：不生成service接口
 * 
 * @author ShenHuaJie
 */
public class Generator {
	/**
	 * 测试 run 执行 注意：不生成service接口 注意：不生成service接口 注意：不生成service接口
	 * <p>
	 * </p>
	 */
	public static void main(String[] args) {
		//用来获取Mybatis-Plus.properties文件的配置信息
		ResourceBundle rb =  ResourceBundle.getBundle("Mybatis-Plus");
		AutoGenerator mpg = new AutoGenerator();


// 全局配置
		GlobalConfig gc = new GlobalConfig();
		String outputDir = rb.getString("projectName")+"/src/main/java";
		if(rb.containsKey("outputDir")){
			String configOutputDir =	rb.getString("OutputDir");
			if(StringUtils.hasText(configOutputDir)){
				outputDir = configOutputDir;
			}
		}


		gc.setOutputDir(outputDir);


		gc.setFileOverride(true);
		gc.setActiveRecord(true);// 开启 activeRecord 模式
		gc.setEnableCache(false);// XML 二级缓存
		gc.setBaseResultMap(true);// XML ResultMap
		gc.setBaseColumnList(false);// XML columList
		gc.setAuthor(rb.getString("author"));
		gc.setActiveRecord(false);
		gc.setServiceName("%sService");
		mpg.setGlobalConfig(gc);

// 数据源配置
		DataSourceConfig dsc = new DataSourceConfig();
		dsc.setDbType(DbType.MYSQL);
		dsc.setTypeConvert(new MySqlTypeConvert());
		dsc.setDriverName("com.mysql.jdbc.Driver");
		dsc.setUsername(rb.getString("userName"));
		dsc.setPassword(rb.getString("passWord"));
		dsc.setUrl(rb.getString("url"));
		mpg.setDataSource(dsc);


// 策略配置
		StrategyConfig strategy = new StrategyConfig();
		strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
		strategy.setTablePrefix(new String[] { rb.getString("tablePrefix") });
		strategy.setSuperServiceClass("pri.hillchen.springbootstd.bms.common.base.BaseService");
		strategy.setSuperServiceImplClass("pri.hillchen.springbootstd.bms.common.base.BaseServiceImpl");
		mpg.setStrategy(strategy);



// 包配置
		PackageConfig pc = new PackageConfig();
// pc.setModuleName("test");
		pc.setParent(rb.getString("parent"));// 自定义包路径
		pc.setController("controller."+rb.getString("modularName"));// 这里是控制器包名，默认 web
		pc.setEntity("entity."+rb.getString("modularName"));
		pc.setMapper("mapper."+rb.getString("modularName"));
		pc.setXml("mapper."+rb.getString("modularName")+".xml");
		pc.setService("service."+rb.getString("modularName"));
		pc.setServiceImpl("service."+rb.getString("modularName")+".impl");
		mpg.setPackageInfo(pc);

		// 自定义模板配置，可以 copy 源码 mybatis-plus/src/main/resources/template 下面内容修改，
		// 放置自己项目的 src/main/resources/template 目录下, 默认名称一下可以不配置，也可以自定义模板名称
		TemplateConfig tc = new TemplateConfig();
		tc.setEntity("tpl/entity.java.vm");
		tc.setMapper("tpl/mapper.java.vm");
		tc.setXml("tpl/mapper.xml.vm");
		tc.setService("tpl/service.java.vm");
		tc.setServiceImpl("tpl/serviceImpl.java.vm");
		tc.setController("tpl/controller.java.vm");
		mpg.setTemplate(tc);
// 执行生成
		mpg.execute();
	}
}
